package hardware

type ConnectData interface {
	IsAvaliable() bool
	Spec() []byte
	PreConfig() []byte
}

type Adapter interface {
	Scan(enable bool) <-chan []byte                                            //流出序列化设备信息
	Configure(config []byte) (err error)                                       //传入序列化适配器配置
	Check() (isAlive bool, isScanActivate bool, adapterName string, err error) //返回活跃状态，扫描使能情况，适配器名称
}

type Controller interface {
	/*
		1.DeviceConnect 使用序列化数据 []byte 来自 WirelessAdapter.Scan 连接 device
		2.DeviceDisconnect 使用序列化数据 []byte 来自 DeviceHandles 销毁 device
		3.DeviceHandles 返回当前所有连接的设备序列化数据，序列化数据的摘要将作为服务之间指定设备的信息
	*/
	DeviceConnect(devSpec []byte) (err error)
	DeviceDisconnect(devHandle []byte) (err error)
	DeviceHandles() (devHandles [][]byte, err error)

	/*
		1.ConnectRequest 请求无线控制器在指定的设备下，以序列化数据创建新的连接，控制器可能不实现
		2.ConnectTransimit 请求无线控制器调用指定设备的连接发送数据，非阻塞
		3.ConnectReceive 请求无线控制器调用指定设备的连接接收数据，阻塞
		4.ConnectCheck 请求无线控制器输出指定设备下的所有可配置连接（使用中的，未使用的）的情况
		3.ConnectConfigure 接收cache观察的配置更改，并传递给无线控制器
	*/
	ConnectRequest(devHandle []byte, connData []byte) (err error)
	ConnectFree(devHandle []byte, connSpec []byte) (err error)
	ConnectTransimit(devHandle []byte, connSpec []byte, transData []byte) (err error)
	ConnectReceive(devHandle []byte, connSpec []byte) (recvData []byte, err error)
	ConnectCheck(devHandle []byte) (connectStatuslist []ConnectData, err error)
	ConnectConfigure(devHandle []byte, connSpec []byte, newConfig []byte) (err error)
}
